/** leetcode 256题:粉刷房子 */
/** 题目：
 * 假如有一排房子，共n个，每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种，你需要粉刷所有的房子并且使其相邻的两个颜色不能相同。
 * 当然，因为市场上不同油漆的价格不同，所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个n * 3的正整数矩阵costs来表示的。
 * 例如：costs[0][0]表示第0号房子粉刷成红色的成本花费；costs[1][2]表示第1号房子粉刷成绿色的花费，以此类推。
 * 请计算出粉刷完所有房子最少的花费成本。
 */
/** 例1：
 * 输入：costs = [[17, 2, 17], [16, 16, 5], [14, 3, 19]]
 * 输出：10
 * 解释：将0号房子粉刷成蓝色，1号房子粉刷成绿色，2号房子粉刷成蓝色。最少花费：2 + 5 + 3 = 10
 */
/** 例2：
 * 输入：costs = [[7, 6, 2]]
 * 输出：2
 */

function minCost(costs) {
  const dp = new Array(costs.length).fill([]);
  dp[0] = costs[0];
  for(var i = 1; i < costs.length; i ++) {
    dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + costs[i][0];
    dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + costs[i][1];
    dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + costs[i][2];
  }
  return Math.min(...dp[dp.length - 1])
}

console.info(minCost([[17, 2, 17], [16, 16, 5], [14, 3, 19]]))
console.info(minCost([[7, 6, 2]]))